home *** CD-ROM | disk | FTP | other *** search
/ Aminet 15 / Aminet 15 - Nov 1996.iso / Aminet / util / moni / showcop.lha / ShowCop.s < prev   
Encoding:
Text File  |  1992-09-02  |  15.0 KB  |  412 lines

  1. *****************************************************************************
  2. *          RESIDENT MODULE                                                  *
  3. * Compiler: Devpac 3.04                                              ORHAN  *
  4. *****************************************************************************
  5.            MACHINE     MC68020
  6.            INCLUDE     "exec/types.i"
  7.            INCLUDE     "exec/execbase.i"
  8.            INCLUDE     "exec/memory.i"
  9.            INCLUDE     "exec/resident.i"
  10.            INCLUDE     "graphics/gfx.i"
  11.            INCLUDE     "hardware/cia.i"
  12.            INCLUDE     "hardware/custom.i"
  13.            INCLUDE     "hardware/intbits.i"
  14.            INCLUDE     "hardware/dmabits.i"
  15.            INCLUDE     "lvo/exec_lib.i"
  16. *****************************************************************************
  17. *          start                                                            *
  18. *****************************************************************************
  19.            SECTION     "CODE",CODE_C
  20.            MOVE.L      ($4),A6
  21.            MOVE.L      #ENDCODE-GOABS,D0
  22.            MOVE.L      #MEMPTR,A1
  23.            CALLSYS     AllocAbs
  24.            TST.L       D0
  25.            BEQ.S       EXIT
  26.  
  27.            LEA.L       GOABS,A0
  28.            MOVE.L      #MEMPTR,A1
  29.            MOVE.L      #ENDCODE-GOABS,D1
  30. CPY:       MOVE.B      (A0)+,(A1)+
  31.            SUB.L       #1,D1
  32.            BNE         CPY
  33.  
  34.            JMP         (MEMPTR.L)
  35. *****************************************************************************
  36. *          exit                                                             *
  37. *****************************************************************************
  38. EXIT:      MOVE.L      #0,D0
  39.            RTS
  40. *****************************************************************************
  41. *          set pseudo vector                                                *
  42. *****************************************************************************
  43.            CNOP        0,4
  44. GOABS:
  45.            CALLSYS     Disable
  46.            BSR.S       SETKICK
  47.  
  48.            LEA.L       EXECLIB,A0
  49.            MOVE.L      KickMemPtr(A6),KickMemPtr(A0)       
  50.            MOVE.L      KickTagPtr(A6),KickTagPtr(A0)       
  51.            MOVE.L      KickCheckSum(A6),KickCheckSum(A0)       
  52.            MOVE.L      A0,($4)
  53.            BSR         SETVEC
  54.            BRA         RESET1
  55. *****************************************************************************
  56. *          initialize KickTagPtr, KickMemPtr to AllocABS module space       *
  57. *****************************************************************************
  58. SETKICK:
  59.            MOVEM.L     D0-D7/A0-A6,-(SP)
  60.            MOVE.L      ($4),A6
  61.            LEA.L       ROMTAGPTR,A0
  62.            LEA.L       ROMTAG,A1
  63.            MOVE.L      A1,(A0)
  64.            MOVE.L      A1,RT_MATCHTAG(A1)
  65.            LEA.L       MODULE,A2
  66.            ADD.L       #ENDCODE-MODULE,A2
  67.            MOVE.L      A2,RT_ENDSKIP(A1)
  68.            LEA.L       MODNAME,A2
  69.            MOVE.L      A2,RT_NAME(A1)
  70.            LEA.L       MODKICK,A2
  71.            MOVE.L      A2,RT_INIT(A1)
  72.  
  73.            LEA.L       MODULE,A5
  74.            LEA.L       MEMLIST,A1
  75.            MOVE.L      A5,ML_ME+ME_ADDR(A1)
  76.  
  77.            LEA.L       ROMTAGPTR,A0          
  78.            MOVE.L      A0,KickTagPtr(A6)
  79.            LEA.L       MEMLIST,A0
  80.            MOVE.L      A0,KickMemPtr(A6)
  81.            CALLSYS     SumKickData
  82.            MOVE.L      D0,KickCheckSum(A6)
  83.            MOVEM.L     (SP)+,D0-D7/A0-A6
  84.            RTS
  85. *****************************************************************************
  86. *          Cold Capture System Reset Vector module                          *
  87. *****************************************************************************
  88. MODULE:
  89.            BSR.S       SETVEC
  90.            TST.L       STARTFLAG
  91.            BNE.S       EXITCOLD
  92.  
  93.            LEA.L       ($8),A0
  94.            LEA.L       EXCEPTSTART1,A1
  95.            MOVE.W      #46-1,D1
  96. AA1:       MOVE.L      A1,(A0)+
  97.            DBF         D1,AA1
  98.  
  99.            MOVE.L      #$ACABA,D0
  100.            MOVE.L      #$BABA,D1
  101.            MOVE.L      #$BACA,D2
  102.            MOVE.L      #$DEDE,D3
  103.            MOVE.L      #$BEBE,D4
  104.            MOVE.L      #$ADA,D5
  105.            MOVE.L      #$BADE,D6
  106.            MOVE.L      #$CADDE,D7
  107.            MOVE.L      #0,A0
  108.            MOVE.L      #0,A1
  109.            MOVE.L      #0,A2
  110.            MOVE.L      #0,A3
  111.            MOVE.L      #0,A4
  112.  
  113.            BSR         MONI
  114.  
  115. EXCEPTSTART1:
  116.            MOVE.W      #$2700,SR
  117.            LEA.L       STARTFLAG,A0
  118.            MOVE.L      #1,(A0)
  119.            MOVE.L      ($F80004.L),A0
  120.            JMP         (A0)       
  121. EXITCOLD:
  122.            LEA.L       STARTFLAG,A0
  123.            CLR.L       (A0)
  124.            JMP         (A5)
  125. *****************************************************************************
  126. *          set system reset vectors address                                 *
  127. *****************************************************************************
  128. SETVEC:
  129.            MOVEM.L     D0-D7/A0-A6,-(SP)
  130.            MOVE.L      ($4),A6
  131.            LEA.L       MODULE,A0
  132.            MOVE.L      A0,ColdCapture(A6)
  133.  
  134.            MOVE.L      #-1,A0
  135.            SUB.L       A6,A0
  136.            MOVE.L      A0,ChkBase(A6)
  137.  
  138.            CLR.L       D1
  139.            LEA.L       SoftVer(A6),A0
  140.            MOVE.W      #((ChkSum-SoftVer)/2)-2,D0
  141. ADDCHECK:  ADD.W       (A0)+,D1
  142.            DBF         D0,ADDCHECK
  143.            NOT.W       D1
  144.            MOVE.W      D1,ChkSum(A6)
  145.  
  146.            MOVEM.L     (SP)+,D0-D7/A0-A6
  147.            RTS
  148. *****************************************************************************
  149. *          software reset                                                   *
  150. *****************************************************************************
  151. RESET1:
  152.            LEA.L       SUPMOD,A0
  153.            MOVE.L      A0,($80)
  154.            TRAP        #0
  155. SUPMOD:    MOVE.W      #$2700,SR
  156.            MOVE.L      ($F80004.L),A0
  157.            SUB.L       #2,A0
  158.            JMP         (A0)
  159. *****************************************************************************
  160. *          resident module                                                  *
  161. *****************************************************************************
  162. MODKICK:
  163.            MOVEM.L     D0-D7/A0-A6,-(SP)
  164.            BSR         SETVEC
  165.  
  166.            MOVE.L      ($4),A6
  167.            CALLSYS     SuperState
  168.            MOVE.L      D0,D7    
  169.            CALLSYS     Disable
  170.  
  171.            LEA.L       EXCEPTSTART,A0
  172.            LEA.L       EXVECTOR,A1
  173.            MOVE.L      #256-1,D0
  174. CPY1:      MOVE.L      A0,(A1)+
  175.            DBF         D0,CPY1
  176.  
  177.            LEA.L       EXVECTOR,A0
  178.            MOVEC       A0,VBR             ;change vector base
  179.  
  180.            CALLSYS     Enable
  181.            MOVE.L      D7,D0
  182.            CALLSYS     UserState
  183.            MOVE.L      #0,D0
  184.  
  185.            MOVEM.L     (SP)+,D0-D7/A0-A6
  186.            RTS
  187. *****************************************************************************
  188. *          exception routine                                                *
  189. *****************************************************************************
  190. EXCEPTSTART:
  191.            CMP.B       #$68,7(SP)             ;if level 2
  192.            BNE.S       EXITEXCEPT
  193.            CMP.B       #$45,(CIAA+ciasdr.L)   ;see key '*'
  194.            BNE.S       EXITEXCEPT
  195.  
  196.            MOVE.L      D0,-(SP)
  197.            MOVE.L      #0,D0
  198.            BSR.S       SHOWCOP
  199.            BSR         MONI                   ;type "V adr"
  200.            MOVE.L      (SP)+,D0
  201. EXITEXCEPT:
  202.            MOVE.L      4(SP),-(SP)
  203.            AND.L       #$0FFF,(SP)
  204.            MOVE.L      ([SP]),(SP)
  205.            RTS
  206. *****************************************************************************
  207. *          show current copper list address                                 *
  208. * D0= copper number in the chain,   ret: D0= adr or -1 if copper not found  *
  209. *****************************************************************************
  210. SHOWCOP:
  211.            MOVEM.L     D1-D7/A0-A2,-(SP) 
  212.            MOVE.L      D0,D5
  213.            MOVE.L      #CUSTOM,A1
  214.            LEA.L       SAVEINT,A0
  215.            MOVE.W      intenar(A1),(A0)
  216.            OR.W        #BITSET,(A0)
  217.            LEA.L       SAVEDMA,A0
  218.            MOVE.W      dmaconr(A1),(A0)
  219.            OR.W        #BITSET,(A0)
  220.  
  221.            MOVE.W      dmaconr(A1),D0
  222.            BTST.L      #DMAB_COPPER,D0                  ;check copper status
  223.            BEQ         AA25
  224.  
  225.            BSR         WAITVB
  226.            MOVE.W      #BITCLR|INTF_INTEN,intena(A1)                ;turn off ints
  227.            MOVE.W      #BITCLR|DMAF_RASTER|DMAF_SPRITE,dmacon(A1)   ;disable display
  228.  
  229.            LEA.L       ($0),A0
  230.            MOVE.L      #MEMPTR,D2
  231.            MOVE.L      #$FFFFFFFE,D4
  232.            MOVE.L      #copjmp1<<16+$0000,D6
  233.            MOVE.L      #copjmp2<<16+$0000,D7
  234. AA20:      MOVE.L      (A0),A2
  235.            CMP.L       D4,A2
  236.            BEQ.S       AA21
  237.            CMP.L       D6,A2
  238.            BEQ.S       AA21
  239.            CMP.L       D7,A2
  240.            BEQ.S       AA21
  241. AA22:      ADD.L       #2,A0
  242.            CMP.L       D2,A0
  243.            BNE         AA20
  244.            BRA         AA25
  245. AA21:      CMP.L       D4,A2
  246.            BEQ.S       AA37
  247.            CMP.L       4(A0),D4
  248.            BEQ         AA22
  249. AA37:
  250.            MOVE.L      -4(A0),D0
  251.            MOVE.L      #dmacon<<16+BITCLR|DMAF_COPPER,-4(A0)    ;disable copper
  252.            MOVE.L      D4,(A0)                   ;ensure copper wait
  253.  
  254.            MOVE.L      #2-1,D1                   ;for interlace
  255. AA32:      BSR         WAITFR
  256.            MOVE.W      dmaconr(A1),D3
  257.            BTST.L      #DMAB_COPPER,D3           ;test copper dma
  258.            BEQ.S       AA31
  259.            DBF         D1,AA32
  260.  
  261.            MOVE.L      D0,-4(A0)
  262.            MOVE.L      A2,(A0)
  263.            BRA         AA22
  264. AA31:
  265.            MOVE.L      D0,-4(A0)
  266.            MOVE.W      #BITSET|DMAF_COPPER,dmacon(A1)  ;enable copper
  267.            BSR.S       WAITFR
  268.            MOVE.L      A2,(A0)
  269.            DBF         D5,AA22
  270. AA26:
  271.            SUB.L       #4,A0
  272.            CMP.L       #0,A0
  273.            BLT.S       AA25
  274.            MOVE.L      (A0),D0
  275.            SWAP.W      D0
  276.            BTST.L      #0,D0
  277.            BNE.S       AA28
  278.            CMP.W       #cop1lc,D0
  279.            BLO.S       AA28
  280.            CMP.W       #copins,D0
  281.            BLO         AA26
  282. AA28:      SWAP.W      D0
  283.            MOVE.W      #BITSET|INTF_VERTB,intena(A1)      ;enable vblank
  284.            MOVE.L      #intena<<16+BITCLR|INTF_VERTB,(A0) ;disable vblank
  285.  
  286.            MOVE.L      #2-1,D1                  ;for interlace
  287. AA19:      BSR.S       WAITFR
  288.            MOVE.W      intenar(A1),D3
  289.            BTST.L      #INTB_VERTB,D3           ;test vblank int
  290.            BEQ.S       AA29
  291.            DBF         D1,AA19
  292.  
  293.            MOVE.L      D0,(A0)
  294.            BRA.S       AA30 
  295. AA29:
  296.            MOVE.L      D0,(A0)
  297.            BRA         AA26
  298. AA30:
  299.            ADD.L       #4,A0
  300.            MOVE.L      A0,D0
  301.            BRA.S       AA27
  302. AA25:
  303.            MOVE.L      #-1,D0
  304. AA27:
  305.            BSR.S       WAITVB
  306.            MOVE.W      #BITCLR|DMAF_RASTER|DMAF_SPRITE|DMAF_COPPER,dmacon(A1)
  307.            MOVE.W      SAVEDMA,dmacon(A1)
  308.            MOVE.W      #BITCLR|INTF_VERTB|INTF_INTEN,intena(A1)
  309.            MOVE.W      SAVEINT,intena(A1)
  310.            MOVEM.L     (SP)+,D1-D7/A0-A2
  311.            RTS
  312. *****************************************************************************
  313. *          wait one frame                                                   *
  314. *****************************************************************************
  315. WAITFR:
  316.            MOVEM.L     D0/D1/A0,-(SP)
  317.            BCHG.B      #CIAB_LED,(CIAA+ciapra.L)   ;blink power led
  318.            MOVE.L      #CUSTOM,A0
  319.            MOVE.L      vposr(A0),D0
  320.            LSR.L       #8,D0
  321.            AND.W       #$07FF,D0
  322. AA24:
  323.            MOVE.L      vposr(A0),D1
  324.            LSR.L       #8,D1
  325.            AND.W       #$07FF,D1
  326.            CMP.W       D0,D1
  327.            BEQ         AA24
  328.  
  329. AA23:      MOVE.L      vposr(A0),D1
  330.            LSR.L       #8,D1
  331.            AND.W       #$07FF,D1
  332.            CMP.W       D0,D1
  333.            BNE         AA23
  334. AA33:
  335.            MOVE.L      vposr(A0),D1
  336.            LSR.L       #8,D1
  337.            AND.W       #$07FF,D1
  338.            CMP.W       D0,D1
  339.            BEQ         AA33
  340.            MOVEM.L     (SP)+,D0/D1/A0
  341.            RTS
  342. *****************************************************************************
  343. *          wait vertical blank                                              *
  344. *****************************************************************************
  345. WAITVB:
  346.            MOVEM.L     D0/A0,-(SP)
  347.            MOVE.L      #CUSTOM,A0
  348. AA34:      MOVE.L      vposr(A0),D0
  349.            LSR.L       #8,D0
  350.            AND.W       #$07FF,D0
  351.            BNE         AA34
  352.            MOVEM.L     (SP)+,D0/A0
  353.            RTS
  354. *****************************************************************************
  355. *          read palette                                                     *
  356. *****************************************************************************
  357. READPALET:
  358.            MOVEM.L     D0/A0-A2,-(SP)
  359.            MOVE.L      #CUSTOM,A0
  360.            MOVE.W      #$0324,bplcon2(A0)    ;color=read
  361.  
  362.            LEA.L       color(A0),A2
  363.            LEA.L       PALETTE,A1
  364.            MOVE.L      #NUMCOLOR-1,D0
  365. AA38:      MOVE.W      (A2)+,(A1)+           ;save colors
  366.            DBF         D0,AA38
  367.              
  368.            MOVE.W      #$0224,bplcon2(A0)    ;color=write 
  369.            MOVEM.L     (SP)+,D0/A0-A2
  370.            RTS
  371. *****************************************************************************
  372. *          module data                                                      *
  373. *****************************************************************************
  374. ROMTAG:                                    ;STRUCTURE RT,0
  375.            DC.W        RTC_MATCHWORD       ;UWORD RT_MATCHWORD
  376.            DC.L        *-*                 ;APTR  RT_MATCHTAG
  377.            DC.L        *-*                 ;APTR  RT_ENDSKIP
  378.            DC.B        RTF_COLDSTART       ;UBYTE RT_FLAGS
  379.            DC.B        1                   ;UBYTE RT_VERSION
  380.            DC.B        0                   ;UBYTE RT_TYPE
  381.            DC.B        127                 ;BYTE  RT_PRI
  382.            DC.L        *-*                 ;APTR  RT_NAME
  383.            DC.L        0                   ;APTR  RT_IDSTRING
  384.            DC.L        *-*                 ;APTR  RT_INIT
  385.                                            ;LABEL RT_SIZE
  386.  
  387. MEMLIST:
  388.            DCB.B       LN_SIZE             ;STRUCTURE ML,LN_SIZE
  389.            DC.W        1                   ;UWORD ML_NUMENTRIES
  390.            DC.L        *-*                 ;LABEL ML_ME      (ME_ADDR)
  391.            DC.L        ENDCODE-MODULE      ;                 (ME_LENGTH)
  392.                                            ;LABEL ML_SIZE
  393.  
  394. CUSTOM     EQU         $DFF000
  395. CIAA       EQU         $BFE001
  396. CIAB       EQU         $BFD000
  397. MEMPTR     EQU         $1E0000
  398. NUMCOLOR   EQU         32
  399. ROMTAGPTR  DC.L        *-*,0
  400. STARTFLAG  DC.L        0
  401. SAVEDMA    DC.W        0
  402. SAVEINT    DC.W        0
  403. PALETTE    DCB.W       NUMCOLOR
  404.            CNOP        0,4
  405. EXVECTOR   DCB.L       256
  406.            DCB.B       1024
  407. EXECLIB    DCB.B       SYSBASESIZE
  408. MODNAME    DC.B        'module',0
  409.            CNOP        0,4
  410. MONI       INCBIN      "DH2:beermon/moni"
  411. ENDCODE:   END
  412.